package com.ls.controller;

import com.ls.model.User;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.RequestEntity;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.util.MultiValueMap;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

@Controller
@RestController
public class RESTController {

    @RequestMapping(value = "/user/{id}"
            , method = RequestMethod.GET)
    public String getUser(@PathVariable int id) {
        System.out.println("getUser");
        return "success";
    }

    @RequestMapping(value = "/user"
            , method = RequestMethod.POST)
    public String addUser(User user, RequestEntity<String> entity) {
        System.out.println(entity.getHeaders());
        System.out.println(entity.getBody());
        System.out.println(user);
        return "success";
    }

    @RequestMapping(value = "/user"
            , method = RequestMethod.PUT)
    public String updateUser(User user) {

        System.out.println("PUT");
        System.out.println(user);
        return "success";
    }

    @RequestMapping(value = "/user/{id}"
            , method = RequestMethod.DELETE)
    public String deleteUser(@PathVariable("id") int id) {
        System.out.println(id);
        return "success";
    }

    @RequestMapping(value = "/testResponse")
    public void testResponse(HttpServletResponse response) throws IOException {

        response.getWriter().print("hello testResponse");

    }

    @RequestMapping(value = "/testResponseBody")
    @ResponseBody
    public String testResponse2() {

        return "hello ResponseBody";

    }

    @RequestMapping(value = "/testResponseUser")
    @ResponseBody
    public User testResponseUser() {
        User user = new User();
        user.setUsername("kkee");
        return user;

    }

    @RequestMapping(value = "/testAxios")
    @ResponseBody
    public String testAxios(String username) {
        System.out.println(username);
        return "hello testAxios";

    }


    @RequestMapping("/testDown")
    public ResponseEntity<byte[]> testResponseEntity(HttpSession session)
            throws IOException {
        //获取ServletContext对象
        ServletContext servletContext = session.getServletContext();
        //获取服务器中文件的真实路径
        String realPath = servletContext.getRealPath("/static/img/1.jpg");
        //创建输入流
        InputStream is = new FileInputStream(realPath);
        //创建字节数组
        byte[] bytes = new byte[is.available()];
        //将流读到字节数组中
        is.read(bytes);
        //创建HttpHeaders对象设置响应头信息
        MultiValueMap<String, String> headers = new HttpHeaders();
        //设置要下载方式以及下载文件的名字
        headers.add("Content-Disposition", "attachment;filename=1.jpg");
        //设置响应状态码
        HttpStatus statusCode = HttpStatus.OK;
        //创建ResponseEntity对象
        ResponseEntity<byte[]> responseEntity = new ResponseEntity<>(bytes, headers, statusCode);
        //关闭输入流
        is.close();
        return responseEntity;
    }

    @RequestMapping(value = "/testUpLoad")
    public String testUpLoad(MultipartFile photo, HttpSession session) throws IOException {
        System.out.println(photo.getName());
        System.out.println(photo.getOriginalFilename());
        String originalFilename = photo.getOriginalFilename();
        String photoPath = session.getServletContext().getRealPath("photo");

        File file = new File(photoPath);
        if (!file.exists()) {
            file.mkdir();
        }
        String finalPath = file.getPath() + File.separator + originalFilename;
        photo.transferTo(new File(finalPath));
        return "success";

    }

    @RequestMapping(value = "/interceptor/testInterceptor")
    public String testInterceptor() {
        System.out.println("testInterceptor");
        return "success";

    }

    @RequestMapping(value = "/testExceptionHandler")
    public String testExceptionHandler() {
        int i = 1 / 0;
        return "success";

    }

    @RequestMapping(value = "/testExceptionHandler2")
    public String testExceptionHandler2() {
        User user= null;
        user.getAge();
        return "success";

    }
}
